玩转stata15—putdocx生成word文档
视
听
盛
宴
putdocx是Stata15最闪亮的功能之一,有了putdocx,用户可以用命令行生成word文档。你可以控制文档的纸张大小、页边距、每一个字的字体、大小、颜色、背景,你可以向文档中插入图片、表格,控制表格内每一个单元格的格式、对齐方式、单元格的网格状态等。本公众号将陆续介绍putdocx的这些功能。有了putdocx,Stata几乎可以和MS WORD无缝对接。
我最闪亮
在我们学习这个命令之前,需要先做一些准备工作,学习两个命令:
如果我们使用putdocx命令去修改一个已经打开的.docx文件,将会报错。因此,我们试图用命令关闭已经打开的word文档,注意,这一行命令非常危险,万一你有一个正在修改的文件没有保存,一下的命令会强行关闭你的word,相关的修改也将丢失!
关闭word的命令是一个DOS命令!这就是臭名昭著的taskkill,他根本不问你要不要存盘,就不问青红皂白地将你的word关闭了!命令很简单,就是下面的一行,其中最前面的“!”是调用操作系统shell的命令。
! taskkill /F /IM WINWORD.EXE /T
最终编辑完后,需要查看文件内容,我们可以用winexec命令将一个word文档打开,不过你一定要知道你的WINWORD.exe在哪里保存,以我的计算机为例,我的WINWORD.exe保存在如下的路径:
C:\Program Files (x86)\Microsoft Office\Office14/WINWORD.EXE
假定你要打开的word文档是D:\mytable.docx,那么,打开这个文档的命令就是下面的了:
winexec "C:\Program Files (x86)\Microsoft Office\Office14/WINWORD.EXE" ///
D:/mytable.docx
先试试下面的命令吧,这个命令首先试图关闭word,然后打开一个word文档,然后休息10秒钟后再关闭掉!
! taskkill /F /IM WINWORD.EXE /T
winexec "C:\Program Files (x86)\Microsoft Office\Office14/WINWORD.EXE" ///
D:/mytable.docx
sleep 10000
! taskkill /F /IM WINWORD.EXE /T
下面我们就开始对putdocx命令的学习,我们试图构造一个简单的word文档,并把它打开。
1
录入文本内容
为了防止要编辑的.docx文件已经打开,造成程序报错,我们首先用taskkill命令关闭所有打开的word文件。
! taskkill /F /IM WINWORD.EXE /T
要实现putdocx命令各种强大的功能,首先必须声明,声明我们要开始putdocx了,对应的命令是:
putdocx begin
然后,我们可以试图写入一段话,注意,一个docx文件包含很多段落,每一次写入一段必须声明,对应的命令是:
putdocx paragraph, halign(left) // 写入一段,将段落内容左对齐
此时,我们可以开始输入文本内容了,所用到的命令是putdocx text。例如我们输入如下内容:
putdocx text ("This is the first paragraph"), bold linebreak //输入加粗的文本"This is the first paragraph",并在结尾处换行。
putdocx text ("这是一个粗体字"), bold linebreak underline(dotted) //输入加粗的文本"这是一个粗体字",给文本加上点式下划线,并在结尾处换行
putdocx text (""), linebreak //不输入文本内容,直接换行
putdocx text ("这是一个粗体字"), font("华文楷体",30,red) bold underline(dash) //输出加粗文本"这是一个粗体字",字体为华文楷体,字号为30,颜色为红色,给文本内容加上虚下划线。
putdocx paragraph, halign(center) //再重新开始一段新的文本内容,使文本内容居中。
putdocx text ("这是一个粗体字"), font("华文隶书",80,blue) //输入文本"这是一个粗体字",字体为华文隶书,字号为80,颜色为蓝色。
我们要把以上输入的这段文字保存在.docx文件里面,这时候需要用到命令putdocx save。
putdocx save D:/mytable.docx, replace //将文本内容保存成D盘的mytable.docx文件。
我们用winexec命令打开编辑后的docx文件,就可以看到输出的结果如下:
winexec "C:\Program Files (x86)\Microsoft Office\Office14/WINWORD.EXE" ///
D:/mytable.docx
2
插入表格
由于刚才我们已经使用putdocx save命令将录入的文本内容进行保存了,为了插入表格,我们需要再次声明开始putdocx。
putdocx begin
插入和编辑表格需要用到的命令是putdocx table,使用这个命令时,我们需要对插入的表格设定一个名字。这里,我们首先插入一个三行四列的空白表格,表格的名字叫做tbl2,并对表格的单元格内容进行编辑。
putdocx table tb12=(3,4)
putdocx table tb12(1,1)=("cell 1by1"), halign(center) //将表格第一行第一列的单元格加入文本"cell 1by1",并居中。
输入完表格内容,我们同样是需要用putdocx save保存一下,但是如果我们用选项replace,先前的文本内容就会被替换掉,所以我们用了选项append将表格拼接到原来的文本内容后面。
putdocx save D:/mytable.docx, append
这个时候我们在用程序打开这个文件,就可以看到输出结果如下,表格放置在了我们之前编辑的文本内容之后:
除了可以插入一个表格外,putdocx table命令也可以将Stata中的矩阵插入到.docx文件中。在这里,我们调用auto.dta文件,做一个简单的回归,并将结果通过矩阵输出到.docx文件中。
sysuse auto, clear
reg mpg weight length headroom foreign
回归中各个变量的系数、标准误、t值等信息都存储在了矩阵r(table)中,我们可以用mat list命令看到矩阵的内容。
mat list r(table)
但是这样的矩阵和我们平时输出的习惯不一样,我们更偏爱的格式是变量名在第一列,因此我们需要对这个矩阵进行转置。
mat rt=r(table)'
mat list rt
接下来,我们就要把这个矩阵的内容输出了,还是要先声明我们开始使用putdocx了。
putdocx begin
在使用putdocx table命令将矩阵输出时,我们保留行列名称,并将数字的格式设置为%7.2f。
putdocx table tbl2 = matrix(rt), rownames colnames nformat(%7.2f)
插入表格后,我们将这部分内容拼接到D:/mytable.docx,并用程序打开。
putdocx save D:/mytable.docx, append
winexec "C:\Program Files (x86)\Microsoft Office\Office14/WINWORD.EXE" ///
D:/mytable.docx
我们通过以上程序生成的.docx文件已经上传到了网站上,链接为:http://202.114.234.173:8669/appres/COMMONUSE/mytable.docx,大家可以下载查看。今天我们介绍的是putdocx很基本的一些功能,今后我们还将陆续为大家介绍putdocx、putpdf、markdown等Stata15更多更强大的新功能。
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑:司海涛
技术总编:刘贝贝
往期推文推荐:
7.一言不合就用stata写邮件(Outlook/Foxmail)
9.I have a Stata, I have a python
10.I have a Stata, I have a Python之二——pdf转word
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
欢迎关注爬虫俱乐部